package com.nkzy.controller;
import cn.hutool.core.bean.BeanUtil;
import com.nkzy.domain.dto.DeptFormDTO;
import com.nkzy.domain.pojo.Dept;
import com.nkzy.domain.pojo.Result;
import com.nkzy.domain.vo.DeptVO;
import com.nkzy.service.DeptService;
import io.swagger.v3.oas.annotations.Operation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.List;

@RequestMapping("/depts")
@RestController
public class DeptController {
    //Controller是前后端数据交互的桥梁，对于后端开发人员来说：给前端开发人员提供接口说明文档
    @Autowired
    private DeptService deptService;
    //保存数据 summary摘要信息
    @PostMapping
    @Operation(summary = "保存用户信息")
    public Result saveUser(@RequestBody DeptFormDTO deptFormDTO){
        //1.把DTO转换为POJO对象
        Dept dept = BeanUtil.copyProperties(deptFormDTO, Dept.class);
        //2.调用业务层的保存方法，完成增加用户信息
        deptService.save(dept);
        //3.返回保存结果
        return Result.success();
    }
    //查询一个用户
    @GetMapping("/{id}")//Restful格式的传参
    @Operation(summary = "查询一个用户")
    public Result getDeptById(@PathVariable Integer id) {
        //1.调用业务层查询方法
        Dept dept = deptService.getById(id);
        //2.把POJO对象转换为VO对象
        DeptVO deptVO = BeanUtil.copyProperties(dept, DeptVO.class);
        //3.返回查询结果
        return Result.success();
    }
    //删除一个用户
    @DeleteMapping("/{id}")
    @Operation(summary = "删除一个用户")
    public Result deleteDeptById(@PathVariable Integer id) {
        //1.调用业务层删除方法
        deptService.removeById(id);
        return Result.success();
    }
    //根据id的集合查询多个用户 @RequestParam请求参数
    @GetMapping
    @Operation(summary = "根据id的集合查询多个用户")
    public Result getDepts(@RequestParam("ids") List<Integer> ids){
        //1.调用业务层查询方法
        List<Dept> depts=deptService.listByIds(ids);
        //2.把POJO对象转换为VO对象
        List<DeptVO> deptVO=BeanUtil.copyToList(depts,DeptVO.class);
        return Result.success();
    }
    //查询所有用户
    @GetMapping("/all")
    @Operation(summary = "查询所有用户")
    public Result getAllUsers(){
        //1.调用业务层查询所有用户
        List<Dept> dept=deptService.list();
        //2.把POJO对象转换为VO对象
        List<DeptVO> deptVO=BeanUtil.copyToList(dept,DeptVO.class);
        return Result.success();
    }
    //修改一个用户
    @PutMapping
    @Operation(summary = "修改一个用户")
    public Result updateUser(@RequestBody DeptFormDTO deptFormDTO){
        //1.把DTO转换为POJO对象
        Dept dept = BeanUtil.copyProperties(deptFormDTO, Dept.class);
        //2.调用业务层修改方法
        deptService.updateById(dept);
        //3.返回修改结果
        return Result.success();
    }
}
